package main

import (
	"fmt"
	"os"
)

/** 
 * go语言操作环境变量
 * 1. Environ可以获取全部的环境变量
 * 2. Getenv可以读取指定的的环境变量
 * 3. Setenv可以设置环境变量
 * 4. Unsetenv可以删除环境变量
 * 5. 源码在$GOROOT/src/os/env.go
 */
func main() {
	// 获取全部的环境变量
	environ := os.Environ()

	// 遍历输出环境变量
	for i := range environ {
		fmt.Println(environ[i])
	}

	fmt.Println("")
	fmt.Println("********************************")
	fmt.Println("")
	// 获取GOPATH
	goPath := os.Getenv("GOPATH")
	// 打印GOPATH的环境变量
	fmt.Printf("GOPATH is %s\n", goPath)

	// os.LookupEnv可以用来判断给定的key是否设置了环境变量
	wantedPath, isExists := os.LookupEnv("XXX_XXX")
	if !isExists {
		fmt.Println("XXX_XXX is not set")
	}
	fmt.Printf("trying to get non exists path:%s\n", wantedPath)

	key := "NAME"
	val := "weini"
	if err := os.Setenv(key, val); err != nil {
		fmt.Println("设置环境变量失败")
	} else {
		fmt.Println("设置环境变量成功")
	}

	kVal := os.Getenv(key)
	// 打印环境变量
	fmt.Printf("环境变量 %s 的值是:%s\n", key, kVal)
	// 这样写更简洁一些
	fmt.Printf("环境变量 %s 的值是:%s\n", key, os.Getenv(key))

	if err := os.Unsetenv(key); err != nil {
		fmt.Println("删除环境变量失败")
	} else {
		fmt.Println("删除环境变量成功")
	}

	kVal2, isExists := os.LookupEnv(key)
	fmt.Printf("再次获取已被删除的环境变量:%s, %t\n", kVal2, isExists)
}
